package com.axin.blog.service.impl;

import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.crypto.SecureUtil;
import com.axin.blog.api.domain.WebUser;
import com.axin.blog.mapper.WebUserMapper;
import com.axin.blog.service.IWebUserService;
import com.axin.common.core.domain.web.AjaxResult;
import com.axin.common.core.domain.web.TableDataInfo;
import com.axin.common.mybatis.utils.PageUtils;
import com.axin.system.api.RemoteConfigService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Arrays;

/**
 * 客户端用户管理 业务层实现
 *
 * @Author axin
 * @Date 2021/10/29 21:00
 **/
@Service
public class WebUserServiceImpl extends ServiceImpl<WebUserMapper, WebUser> implements IWebUserService {


    @Autowired
    private RemoteConfigService configService;


    /**
     * 根据参数分页查询客户端用户列表
     *
     * @param user
     * @return
     */
    @Override
    public TableDataInfo selectPageWebUserList(WebUser user) {
        return PageUtils.buildDataInfo(baseMapper.selectPageWebUserList(PageUtils.buildPage(), user));
    }


    /**
     * 新增用户
     *
     * @param user
     * @return 结果
     */
    @Override
    public int insertWebUser(WebUser user) {
        AjaxResult configKey = configService.getConfigKey("web.user.default.password");
        if (configKey.isSuccess()){
            user.setPassword(SecureUtil.md5(configKey.getMsg()));
        }

        return baseMapper.insert(user);
    }

    /**
     * 查询用户信息
     *
     * @param userId
     * @return
     */
    @Override
    public WebUser selectWebUserById(Long userId) {
        return baseMapper.selectById(userId);
    }

    /**
     * 修改客户端用户信息
     *
     * @param user 客户端用户信息
     * @return 结果
     */
    @Override
    public int updateWebUser(WebUser user) {
        return baseMapper.updateById(user);
    }

    /**
     * 批量删除用户
     *
     * @param userIds 需要删除的客户端用户ID
     * @return 结果
     */
    @Override
    public void deleteWebUserByIds(Long[] userIds) {
        baseMapper.deleteBatchIds(Arrays.asList(userIds));
    }


    /*****************************************前台  ****************************************************************/
    /**
     * 通过用户名查询客户端用户
     *
     * @param username 用户名
     * @return 用户对象信息
     */
    @Override
    public WebUser selectUserByUserName(String username){
        return baseMapper.selectUserByUserName(username);
    }

    @Override
    public AjaxResult register(WebUser user) {
        WebUser webUser = baseMapper.selectUserByUserName(user.getUserName());
        if (ObjectUtil.isNotNull(webUser)) {
            return AjaxResult.error("账号已存在");
        }

        user.setPassword(SecureUtil.md5(user.getPassword()));
        user.setNickName("axin_" + RandomUtil.randomString(5));
        user.setPlatform("axin");
        user.setStatus(1);
        user.setCommentStatus(1);
        user.setEmailNoticeStatus(0);
        baseMapper.insert(user);
        return AjaxResult.success("注册成功，请登录");
    }

}
